package simple;

import sword.offer.common.TreeNode;

import java.util.Objects;

/**
 * 给你二叉树的根节点root 和一个表示目标和的整数targetSum 。判断该树中是否存在 根节点到叶子节点 的路径，这条路径上所有节点值相加等于目标和targetSum 。如果存在，返回 true ；否则，返回 false 。
 * <p>
 * 叶子节点 是指没有子节点的节点。
 * <p>
 * 链接：https://leetcode.cn/problems/path-sum
 *
 * @author 胡宇轩
 * @Email: programboy@163.com
 */
public class PathSum {
    class Solution {
        public boolean hasPathSum(TreeNode root, int targetSum) {
            return recur(root, targetSum, 0);
        }

        private boolean recur(TreeNode root, int targetSum, int sum) {
            if (Objects.isNull(root)) {
                return false;
            }
            if (Objects.isNull(root.left) && Objects.isNull(root.right)) {
                return sum + root.val == targetSum;
            }
            return recur(root.left, targetSum, sum + root.val) || recur(root.right, targetSum, sum + root.val);
        }
    }
}
